home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / lang / BCPL4Amiga.lha / tripos / bcpllib.c < prev    next >
C/C++ Source or Header  |  1988-12-06  |  2KB  |  83 lines

  1. /* bcpllib.c - An interface between C programs and BCPL
  2. Compile with Manx 3.4:
  3. cc bcpllib
  4. By Bill Kinnersley - Dec 18, 1987
  5. Mail:   Physics Dept.
  6.         Montana State University
  7.         Bozeman, MT 59717
  8. BITNET: iphwk@mtsunix1
  9. INTERNET: iphwk%mtsunix1.bitnet@cunyvm.cuny.edu
  10. UUCP: ...psuvax1!mtsunix1.bitnet!iphwk
  11. */
  12. #include <libraries/dosextens.h>
  13. #include <functions.h>
  14. #include <exec/memory.h>
  15.  
  16. long a0[3], *a1, *a, b[500];
  17.  
  18. BCPLInit() {
  19.         struct DosLibrary *doslib;
  20.         struct Task *mytask;
  21.         long *splower;
  22.  
  23.         doslib = (struct DosLibrary *)OpenLibrary("dos.library",0L);
  24. /*      mytask = FindTask(0L);
  25.         splower = (long *)mytask->tc_SPLower;
  26.         printf("splower = %lx\n",splower);*/
  27.         a0[0] = doslib->dl_A2;
  28.         a0[1] = doslib->dl_A5;
  29.         a0[2] = doslib->dl_A6;
  30.         a1 = (long *)AllocMem(2000L,MEMF_CLEAR);
  31.         /*splower; a1+=200;*/
  32.         a = &a1[3];
  33. }
  34.  
  35. BCPLQuit() {
  36.         FreeMem(a1,2000L);
  37. }
  38.  
  39. long BCPL(n) long n; {
  40. #asm
  41. ;       move.l  8(a7),d0
  42.         movem.l d4-d7/a2-a5,-(a7)
  43.         movea.l a7,a0
  44.         adda.l  #40,a0
  45.         movem.l (a0),d0-d4
  46.         adda.l  #4,a0
  47.         movea.l _a,a1
  48.         moveq   #9,d5
  49. l1:     move.l  (a0)+,(a1)+
  50.         dbf     d5,l1
  51. ;       movea.l _a,a1
  52. ;       movem.l (a1),d1-d4
  53.         movea.l _a1,a1
  54.         lea     _a0,a0
  55.         movem.l (a0)+,a2/a5-a6
  56.         suba.l  a0,a0
  57.         move.l  0(a2,d0.l),a4
  58.         moveq   #$c,d0
  59.         jsr     (a5)
  60.         move.l  d1,d0
  61.         movem.l (a7)+,d4-d7/a2-a5
  62. #endasm
  63. }
  64.  
  65. BPTR MakeBSTR(s) char *s; {
  66.         long len;
  67.         char *bs;
  68.  
  69.         len = (long)strlen(s);
  70.         bs = (char *)AllocMem(len+2L,MEMF_CLEAR);
  71.         if (!bs) {printf("Can't allocate\n"); exit(0);}
  72.         bs[0] = len;
  73.         strcpy(&bs[1], s);
  74.         return ((long)bs)>>2;
  75. }
  76.  
  77. FreeBSTR(bs) long bs; {
  78.         char *s;
  79.  
  80.         s = (char *)BADDR(bs);
  81.         FreeMem(s,(long)(*s)+2L);
  82. }
  83.